﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Equipo
{
    public partial class BusquedaEquipo : Form
    {
        Dictionary<int, string> listaEstado;

        public BusquedaEquipo()
        {
            InitializeComponent();
        }

        private void ListarTipoEquipo()
        {
            Sisco.LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new LogicaNegocio.TipoEquipoBLL();
            cmbTipoEquipo.DataSource = tipoEquipoBLL.Listar();
            cmbTipoEquipo.ValueMember = "ID";
            cmbTipoEquipo.DisplayMember = "NOMBRETIPO";
            cmbTipoEquipo.SelectedIndex = -1;
        }

        private void ListarEstado()
        {
            cmbEstado.DataSource = GenerarListaEstado().ToList();
            cmbEstado.ValueMember = "Key";
            cmbEstado.DisplayMember = "Value";
            cmbEstado.SelectedIndex = -1;
        }

        private Dictionary<int,string> GenerarListaEstado()
        {
            listaEstado = new Dictionary<int, string>();
            listaEstado.Add(0, "No asignado");
            listaEstado.Add(1, "Asignado");
            listaEstado.Add(2, "Liberado");
            listaEstado.Add(3, "Dado de baja");

            return listaEstado;
        }

        private void chkMarca_CheckedChanged(object sender, EventArgs e)
        {
            if (chkMarca.Checked)
            {
                txtMarca.Enabled = true;
                txtMarca.Focus();
            }
            else
            {
                txtMarca.Enabled = false;
                txtMarca.ResetText();
            }
                
        }

        private void chkModelo_CheckedChanged(object sender, EventArgs e)
        {
            if (chkModelo.Checked)
            {
                txtModelo.Enabled = true;
                txtModelo.Focus();
            }
            else
            {
                txtModelo.Enabled = false;
                txtModelo.ResetText();
            }
        }

        private void chkSerie_CheckedChanged(object sender, EventArgs e)
        {
            if (chkSerie.Checked)
            {
                txtSerie.Enabled = true;
                txtSerie.Focus();
            }
            else
            {
                txtSerie.Enabled = false;
                txtSerie.ResetText();
            }
        }

        private void chkTipoEquipo_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTipoEquipo.Checked)
            {
                cmbTipoEquipo.Enabled = true;
                cmbTipoEquipo.Focus();
            }
            else
            {
                cmbTipoEquipo.Enabled = false;
                cmbTipoEquipo.SelectedIndex = -1;
            }
        }

        private void chkFechaRegistro_CheckedChanged(object sender, EventArgs e)
        {
            if (chkFechaRegistro.Checked)
            {
                txtFechaDesde.Enabled = true;
                txtFechaHasta.Enabled = true;
                txtFechaDesde.Focus();
            }
            else
            {
                txtFechaDesde.Enabled = false;
                txtFechaHasta.Enabled = false;
                txtFechaDesde.ResetText();
                txtFechaHasta.ResetText();
            }            
        }

        private void chkEstado_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEstado.Checked)
            {
                cmbEstado.Enabled = true;
                cmbEstado.Focus();
            }
            else
            {
                cmbEstado.Enabled = false;
                cmbEstado.SelectedIndex = -1;
            }
        }

        private void BusquedaEquipo_Load(object sender, EventArgs e)
        {
            ListarTipoEquipo();
            ListarEstado();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            string valMarca = txtMarca.Text;
            string valModelo = txtModelo.Text;
            string valSerie = txtSerie.Text;
            int? valIdTipoEquipo = cmbTipoEquipo.SelectedIndex >= 0 ? int.Parse(cmbTipoEquipo.SelectedValue.ToString()) : new Nullable<int>();
            DateTime? valFechaRegistroDesde = string.IsNullOrWhiteSpace(txtFechaDesde.Text) ? DateTime.Parse(txtFechaDesde.Text) : new Nullable<DateTime>();
            DateTime? valFechaRegistroHasta = string.IsNullOrWhiteSpace(txtFechaHasta.Text) ? DateTime.Parse(txtFechaHasta.Text) : new Nullable<DateTime>();
            int? valEstado = cmbEstado.SelectedIndex >= 0 ? int.Parse(cmbEstado.SelectedValue.ToString()) : new Nullable<int>();

            Sisco.LogicaNegocio.EquipoBLL equipoBLL = new LogicaNegocio.EquipoBLL();
            var result = equipoBLL.BuscarEquipo(valMarca, valModelo, valSerie, valIdTipoEquipo, valFechaRegistroDesde, valFechaRegistroHasta, valEstado);

            gridResultado.DataSource = result;
        }

        private void gridResultado_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridResultado.DataSource != null)
            {
                gridResultado.Columns["ID"].Visible = false;
                gridResultado.Columns["IDUSUARIO"].Visible = false;
                gridResultado.Columns["IDTIPOEQUIPO"].Visible = false;
                gridResultado.Columns["NOMBRETIPO"].HeaderText = "Tipo de Equipo";
                gridResultado.Columns["MARCA"].HeaderText = "Marca";
                gridResultado.Columns["MODELO"].HeaderText = "Modelo";
                gridResultado.Columns["SERIE"].HeaderText = "Serie";
                gridResultado.Columns["ASIGNADO"].HeaderText = "Asignado";
                gridResultado.Columns["FECHAREGISTRO"].HeaderText = "Fecha de Registro";
                gridResultado.Columns["FECHAREGISTRO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCellsExceptHeader;
            }
        }

        private void gridResultado_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if(listaEstado == null)
                GenerarListaEstado();

            if (gridResultado.Columns[e.ColumnIndex].Name == "ASIGNADO")
            {
                int valor = (int)e.Value;

                e.Value = listaEstado.SingleOrDefault(x => x.Key == valor).Value;
            }
        }
    }
}
